package com.xjh.basestudy.designmode.behaviorMode.behaviorMode1_TemplateMethod.p2_template;

/**
 * @Author XuJianHua
 * @Date 2022/9/26 23:00
 * @Description
 * 虽然哺乳动物的生存技能有着天壤之别，但它们的生存方法live()毫无二致。倘若为每种动物都编写一遍同样的方法，必定会造成代码冗余。
 * 我们不如将这个生存法则抽离出来，就像表格一样，作为一个通用的模板方法，定义在哺乳动物类中
 *
 * 哺乳动物类在第3行与第5行分别定义了“移动”与“进食”两种动物本能，利用抽象方法关键字“abstract”声明凡是哺乳动物必须实现这两个行为。
 * 接着第7行的生存方法live()则以实体方法的形式出现，这就意味着所有哺乳动物都要以此为模板，这便是我们要抽离出来的模板方法了。
 * 可以看到第8行与第9行我们在模板方法中分别调用了move()方法与eat()方法，
 * 固化下来的生存法则必须先“移动”再“进食”才能完成“捕食”。此外，我们使用了关键字“final”使此模板方法不能被重写修改。
 * 哺乳动物类已经完成，我们得重构之前的鲸类与人类的代码，

 */
public abstract class Mammal {

    public abstract void move();

    public abstract void eat();

    public final void live() {
        move();
        eat();
    }

}